/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author VANDH
 */
public class Main {
// Bài tập :
// Viết mẫu kiểm tra password nhập vào có hợp lệ hay không
// Viết mẫu kiểm tra email hợp lệ không

    public static void main(String[] args) {
//        Regular expression
//        Character class
//        String p = "qu[ae]"; // -> pattern
//        String p = "qu[a-f0-9]s"; // -> character class
//        String p = "qu[^a-f0-9]s"; // -> character class

//        String p = "qu\\ws"; // -> \w -> predefined class, [W]ord
//        String p = "qu\\Ws"; // -> \W = ^\w

//        String p = "qu\\ds"; // -> \d -> predefined class, [D]igit
//        String p = "qu\\Ds"; // -> \D = ^\d
//        String p = "qu\\ss"; // -> \s -> [S]pace
//        String p = "qu\\Ss"; // -> \S = ^\s
//        String p = "q.a";    // dấu . tương ứng mọi kí tự
//        String p = "q?a";    // 0 hoặc 1 kí tự phía trước, ? repeat
//        String p = "qu+a";    // 1 hoặc n kí tự phía trước
//        String p = "q.+a";    // 1 hoặc n kí tự phía trước, repeat Greedy
//        String p = "q.*a";    // 0 hoặc n kí tự phía trước, repeat Greedy
//        String p = "q.*?a";    // 0 hoặc n kí tự phía trước, repeat Greedy, thêm dấu ? thành Reluctant (lười ăn)
        String p = "q.*?a$";   // ^ đại vị trí đầu dòng, $ đại diện vị trí cuối dòng
        String dest = "quuality questions create a quality answera";

        Pattern pattern = Pattern.compile(p);
        Matcher matcher = pattern.matcher(dest);

        while (matcher.find()) {
            System.out.println(matcher.group() + "("
                    + matcher.start() + ", " + matcher.end() + ")");
        }


//        String p = "th[ia]s"; // -> pattern
//        String p = "th[a-f0-9]s"; // -> pattern, group position
//        String p = "th[^a-f0-9]s"; // -> pattern, group negative
//        String p = "th\\ws"; // -> pattern, \w -> predefined class
//        String p = "th\\Ws"; // -> pattern, group negative
//      \w == [a-zA-Z_0-9]  -> w là word
//      \W == [^a-zA-Z_0-9]
//      \d == [0-9]
//      \D == [^0-9] -> d là digits
//      \s == bắt tất cả kí tự trắng, \S
//      . -> 1 kí tự bất kì
//        String dest = "To change this th0s th#s template, choose Tools Templates";
//        String p = "q.?a";    // 0 hoặc 1, dấu . tương ứng mọi kí tự
//        String p = "qu?a";    // 0 hoặc 1
//        String p = "qu*a";  // 0 hoặc n
//        String p = "q.+a";  // 1 hoặc n -> xử lí theo phương thức tham ăn (gready)
//        String p = "^q.+?a";  // 1 hoặc n -> xử lí theo phương thức tham ăn

    }
}